# 赋值、浅拷贝、深拷贝
# 可变数据类型，是指在修改时直接修改原数据，而不是重新开辟空间进行存储
# 如：列表、字典、集合

# 赋值
# lit = [1, 2, 3, [4, 5, 6]]
# lit1 = lit
# print(id(lit1), id(lit))
# 两个变量名指向同一块空间

# 浅拷贝
# lit = [1, 2, 3, [4, 5, 6], {'A': 2, 'B': 3}]
# lit1 = lit.copy()
# print(id(lit[1]), id(lit1[1]))  #  浅拷贝会创建新的空间
# lit[0] = 100    # 不变数据是共享元素id,而在列表中不可变元素的改变（增删改）是索引位上的id的变化，
# 所以只会引起一方的变化
# lit.pop(0)
# lit[-2].append(7)   # 可变数据则同样是共享元素的id，在列表中可变数据的改变是改变可变数据元素本身，
# id不变，所以两侧都会随之改变
# lit1[-1]['C'] = 4
# print(lit)
# print(lit1)
# print(id(lit[-1]), id(lit1[-1]))

# dic = {'001': [1, 2, [4, 5, 6]], '222': 25}
# dic1 = dic.copy()
# dic['333'] = 35
# dic['222'] = 10
# dic1['001'].append(7)
# print(dic)
# print(dic1)

# 深拷贝
import copy

# lit = [1, 2, 2, [4, 5, 6]]
# lit1 = copy.deepcopy(lit)    # 深拷贝同样是会创建空间
# print(lit, id(lit))
# print(lit1, id(lit1))
# lit[0] = 100    # 不可变数据的同样是元素id的共享，数据的改变实质的是id的改变，只会改变一侧
# lit1[-1].append(7)  # 而可变数据是元素自身元素id的共享，新拷贝对象会自动创建存储相应可变数据的空
# 间，新空间直接引用可变数据元素自身元素的id，改变时同样是id的变化，所以也只会改变一侧
# lit1[-1][0] = 9
# print(id(lit[-1]))
# print(id(lit1[-1]))
# print(lit)
# print(lit1)

# v1 = '22'
# lit = [1, 2, 'w', v1]
# v1 = '2'
# print(lit)
# print(v1)
# print(id(lit[-1]), id(v1))
